package aiowang.javaprimary.persistence;

import aiowang.javaprimary.utils.RabbitMqUtils;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.MessageProperties;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * @author aiowang
 * @description:
 * @date 2021/8/30 10:51
 **/
public class Persistence {

    private final static String QUEUE_NAME = "persistence_queue";
    private final static String EXCHANGE_NAME = "persistence_exchange";

    public static void main(String[] args) throws IOException, TimeoutException {

        Channel channel = RabbitMqUtils.getChannel();

        //通道绑定交换机
        /**
         * 参数明细
         * 1、交换机名称
         * 2、交换机类型，fanout、topic、direct、headers
         * 2、交换机是否持久化
         */
        //Publish/subscribe发布订阅模式
        //exchange的持久化
        channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT,true);



        /**
         * 声明队列，如果Rabbit中没有此队列将自动创建
         * param1:队列名称
         * param2:是否持久化
         * param3:队列是否独占此连接
         * param4:队列不再使用时是否自动删除此队列
         * param5:队列参数
         * String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments
         *
         */
        //queue的持久化
        channel.queueDeclare(QUEUE_NAME, true, false, false, null);


        /**
         * 参数明细
         * 1、队列名称
         * 2、交换机名称
         * 3、路由key
         */
        channel.queueBind(QUEUE_NAME,EXCHANGE_NAME,"test");


        for(int i = 0;i<10;i++){

            /**
             * 消息发布方法
             * param1：Exchange的名称，如果没有指定，则使用Default Exchange
             * param2:routingKey,消息的路由Key，是用于Exchange（交换机）将消息转发到指定的消息队列
             * param3:消息包含的属性
             * param4：消息体
             * 这里没有指定交换机，消息将发送给默认交换机，每个队列也会绑定那个默认的交换机，但是不能显示绑定或解除绑定
             * 默认的交换机，routingKey等于队列名称
             */
            //消息的持久化
            channel.basicPublish(EXCHANGE_NAME, "test", MessageProperties.PERSISTENT_TEXT_PLAIN, "persistent_test_message".getBytes());

        }

        System.out.println("mq email 消息发送成功！");
    }

}
